/* 二进制位操作符
 * 注意优先级
 */

#include <stdio.h>

// 注意#的用法，是把实际参数放到一对双引号里

#define PRINT(int) printf(#int " =  %d\n", int)

int main()
{
    int x, y, z;
    x = 03;
    y = 02;
    z = 01;
    PRINT(x | y & z);
    PRINT(x | y & ~ z);
    PRINT(x ^ y & ~z);
    PRINT(x & y && z);

    x = 1;
    y = -1;
    PRINT( !x | x);
    PRINT( ~x | x);
    PRINT( x ^ x);
    x <<= 3;
    PRINT(x);
    y <<= 3;
    PRINT(y);
    y >>= 3;
    PRINT(y);

    return 0;
}